x11: Rely on passive keyboard grabs with XI2 for DnD
authorCarlos Garnacho <carlosg@gnome.org>
Thu, 5 May 2016 17:00:28 +0000 (19:00 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 5 May 2016 17:16:25 +0000 (19:16 +0200)
The active keyboard grab can be spared then. This way the passive
key grabs allow other key combinations (eg. alt-tab) that are not
mandatory to grab here.

gdk/x11/gdkdnd-x11.c

index 3d25ea2734a8c5a304ae3c28d7b4906d8779d03d..c433b173abfe7f797603d738fde4e6c058515822 100644 (file)
@@ -2656,6 +2656,7 @@ drag_context_grab (GdkDragContext *context)
 {
   GdkX11DragContext *x11_context = GDK_X11_DRAG_CONTEXT (context);
   GdkDevice *device = gdk_drag_context_get_device (context);
+  GdkSeatCapabilities capabilities;
   GdkWindow *root;
   GdkSeat *seat;
   gint keycode, i;
@@ -2666,8 +2667,15 @@ drag_context_grab (GdkDragContext *context)
   root = gdk_screen_get_root_window (gdk_window_get_screen (x11_context->ipc_window));
   seat = gdk_device_get_seat (gdk_drag_context_get_device (context));
 
+#ifdef XINPUT_2
+  if (GDK_IS_X11_DEVICE_XI2 (device))
+    capabilities = GDK_SEAT_CAPABILITY_ALL_POINTING;
+  else
+#endif
+    capabilities = GDK_SEAT_CAPABILITY_ALL;
+
   if (gdk_seat_grab (seat, x11_context->ipc_window,
-                     GDK_SEAT_CAPABILITY_ALL, FALSE,
+                     capabilities, FALSE,
                      x11_context->cursor, NULL, NULL, NULL) != GDK_GRAB_SUCCESS)
     return FALSE;